SSM Automationを使ってWindows Update実行を自動化
こんにちは。 ご機嫌いかがでしょうか。 "No human labor is no human error" が大好きな吉井です。
今回は依頼を受けて SSM Automation を触ってみます。
突然ですが、ご自身が管理している Windows サーバーのパッチ管理はどうされていますか? 私は基幹系システムを担当することがほとんどだったので、アプリケーションに影響が出る可能性を考慮して Windows Update は無効にしているシステムが多かったように記憶しています。
しかし、クラウド移行を機に、パッチ運用を見直したい、最新パッチを適用していきたいという話をよく頂戴します。
そんな要望に応えるべく SSM Automation で Windows Update を実行する自動化オペレーションを実装します。
動作概要
今回作成する Automation は以下の要領で動作します。
- EC2 の起動状態をチェック
- 停止の場合
- EC2 を起動
- Windows Update を実行
- EC2 を停止
- 起動中の場合
- Windows Update を実行
Windows Update を定期実行するだけであれば、 Windows のコントロールパネルから設定すれば良いですが、 今回は停止状態の EC2 を起動させる処理を入れています。
これは常時起動ではない EC2 を対象にするための処理です。 特定用途で日に数時間、週に数時間しか起動しない EC2 に対して Windows Update を実行する目的です。
前提
SSM セットアップ
この処理は SSM を使います。 SSM のセットアップを行ってください。 手順は本エントリでは割愛します。公式ドキュメントを参照ください。
SSM Automation の設定
Automation も設定しておきます。 手順は本エントリでは割愛します。公式ドキュメントを参照ください。
タグ付け
Windows Update の実行対象とする EC2 にタグを付けます。 タグキー/タグバリューともに任意です。 例えば、キー:ForceWindowsUpdate、バリュー:true などにします。
実装
それでは実装します。 マネジメントコンソールへログインし Systems Manager を開きます。 左側メニューから ドキュメント をクリックします。 <ドキュメント>画面が表示されたら、ドキュメントの作成 をクリックします。
<ドキュメントの作成>画面では、判別しやすい名前を入力します。
コンテンツの YAML にチェックを入れ、コンテンツは以下をコピー&ペーストします。 3行目の「your_role_arn」 には ”SSM Automation の設定” で作成したご自身のロールを記述します。
schemaVersion: "0.3" description: "Force Run Windows Update." assumeRole: your_role_arn parameters: InstanceId: type: StringList description: "(Optional) EC2 Instance(s) to run" mainSteps: - name: checkInstancesState action: aws:changeInstanceState maxAttempts: 1 timeoutSeconds: 30 onFailure: step:runWindowsUpdateOnly inputs: InstanceIds: "{{InstanceId}}" CheckStateOnly: true DesiredState: stopped isCritical: false - name: startInstance action: aws:changeInstanceState maxAttempts: 1 timeoutSeconds: 600 onFailure: Abort inputs: InstanceIds: "{{InstanceId}}" CheckStateOnly: false DesiredState: running - name: runWindowsUpdate action: aws:runCommand maxAttempts: 1 timeoutSeconds: 3600 onFailure: Abort inputs: DocumentName: AWS-InstallWindowsUpdates InstanceIds: "{{InstanceId}}" Parameters: Action: Install AllowReboot: 'True' - name: stopInstance action: aws:changeInstanceState maxAttempts: 1 timeoutSeconds: 600 onFailure: Abort inputs: InstanceIds: "{{InstanceId}}" CheckStateOnly: false DesiredState: stopped isEnd: true - name: runWindowsUpdateOnly action: aws:runCommand maxAttempts: 1 timeoutSeconds: 3600 onFailure: Abort inputs: DocumentName: AWS-InstallWindowsUpdates InstanceIds: "{{InstanceId}}" Parameters: Action: Install AllowReboot: 'True'
コンテンツの貼り付けが終わったらページ下部の ドキュメントの作成 をクリックします。
オペレーション
作成したドキュメントを実行します。 左側メニューから オートメーション をクリックします。
<自動化の実行>画面で オートメーションの実行 をクリックします。 <ドキュメントの選択>画面のフィルター欄で 所有者:自己所有 を選択し絞り込みます。 前の手順で作成したドキュメントにチェックを入れ 次へ をクリックします。
<自動化ドキュメントの実行>画面で レートの制御 を選択します。 ターゲットのパラメータ選択では InstanceId を ターゲットは Tags を選択します。 タグには前提で設定したタグを入力します。 Rate Control で任意の値を指定したら ページ下部の 実行 をクリックします。
実行の詳細が表示されるので成功することを確認します。
さいごに
Windows Update を実行する自動化オペレーションを紹介しました。 パッチを適用することのリスクとしないことのリスクは、システムの特性に合わせて判断すべきだと考えます。 可能な限りパッチは最新化するという方針を立てたお客様のお役に立てれば幸いです。
参考
Systems Manager Automation アクションのリファレンス SSM ドキュメントプラグインの参照 AWS Systems Manager オートメーション